# 普通的函数，假如我想让函数自己调用函数，会发生什么？
def tell_stroy():
    print("从前有座山")
    print("山上有座庙")
    print("庙里有个老和尚")
    print("老和尚讲的是什么呢？")
    tell_stroy()
# tell_stroy()

# 递归
# 案例一：计算从i开始到10以内的和
def text1(i):
    if i ==10:      # 设定出口
        return 10
    else:
        return i+text1(i+1)
# print(text1(1))

# 案例二：计算x整数以内的和
def sum2(x):
    if x > 1:
        value = x + sum2(x-1)
    else:
        value = 1
    return value
# print(sum2(10)) # 55
# 任何函数，没有加上()，就不能算作调用，都会是地址值
# print(sum2)     # 它会是一个地址值

# 匿名函数 ： 关键字是lambda
# print(lambda x, y: x + y)       # 它会是一个地址值
# print(lambda x, y: x + y(1,2))       # 它也是一个地址值

# 怎么调用匿名函数？
鸿年 = lambda x, y: x + y
# print(鸿年(1,2))

# 匿名函数和普通函数的区别，在于说匿名函数适用于仅仅使用一次的场景。

# 普通函数也可以实现匿名函数的功能
def sum3(x,y):
    return x+y
# print(sum3(1,2))

# 匿名函数和内置函数使用

# 比较下面薪资求薪资最高的那个人名
salarics = {
    'xiaolong1':30000,
    'xiaolong3':3000,
    'long1':1000
}
# max内置函数，拿出最大值.max是实现不了的
# print(max(salarics))
"""
ascii码值比较：
小写的a是97，b是98，c是99，d是100，e是101，f是102....

大写的A是65，B66，C67.。。
"""
# 自己写一个方法进行比较
def func(name):
    return salarics[name]
# print(max(salarics,key = func))     # key参数：是可以按照指定的方法来进行比对

# 用匿名函数
print(max(salarics,key = lambda name:salarics[name]))
"""
key = lambda name:salarics[name]
按照这个值进行比对

真正返回key的是：max(salarics,key=)
"""





















